/**
 * 版权所有 2009-2012山东新北洋信息技术股份有限公司
 * 保留所有权利。
 */
package com.linyaonan.leetcode.easy._374;

/**
 *
 * 我们正在玩一个猜数字游戏。 游戏规则如下：
 * 我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。
 * 每次你猜错了，我会告诉你这个数字是大了还是小了。
 * 你调用一个预先定义好的接口 guess(int num)，它会返回 3 个可能的结果（-1，1 或 0）：
 *
 * -1 : 我的数字比较小
 *  1 : 我的数字比较大
 *  0 : 恭喜！你猜对了！
 * 示例 :
 *
 * 输入: n = 10, pick = 6
 * 输出: 6
 *
 *
 * @ProjectName: leetcode
 * @Package: com.linyaonan.leetcode.easy._374
 * @ClassName: GuessNumber
 * @Author: linyaonan
 * @Date: 2019/12/25 17:23
 */
public class GuessNumber {

    private int guess(int num, int p) {
        if (p == num) {
            return 0;
        } else if (num > p) {
            return -1;
        } else {
            return 1;
        }
    }

    public int guessNumber(int n, int p) {

        int l = 1;
        int r = n;
        while (l <= r) {
            int m = l + ((r - l) >> 1);
            int g = guess(m, p);
            if (g == 0) {
                return m;
            } else if (g == -1) {
                r = m - 1;
            } else {
                l = m + 1;
            }
        }
        return -1;
    }

}
